package test.examation;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class 拼多多 {
    static int count=0;
    public static void main(String[] args) {
//        m1();
        m2();
//        m3();
//        m4();


    }

    private static void m4() {
        Scanner sc=new Scanner(System.in);

        char grid[][]=new char[6][6];
        for(int i=0;i<6;i++){
            String str=sc.nextLine();
            for(int j=0;j<6;j++){
                grid[i][j]=str.charAt(j);
            }
        }
        for(int k=0;k<6;k++){
            dfs(grid,0,0,k);
        }
        System.out.println(count);
    }

    public static void dfs(char grid[][],int x,int y,int k){//在x,y处种植k

    }

    private static void m3() {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int t=sc.nextInt();
        if(t==0){
            System.out.println(0);
            return;
        }
        int z_hot[]=new int[n];
        int z_good[]=new int[n];
        int w_hot[]=new int[m];
        int w_good[]=new int[m];


        for(int i=0;i<n;i++){
            z_hot[i]=sc.nextInt();
            z_good[i]=sc.nextInt();
        }
        for(int i=0;i<m;i++){
            w_hot[i]=sc.nextInt();
            w_good[i]=sc.nextInt();
        }
        int min=Integer.MAX_VALUE;
        int flag=0;

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(z_good[i]>=t){
                    min=Math.min(min,z_hot[i]);
                    flag=1;
//                    System.out.println(min);
                }
                if(w_good[j]>=t){
                    min=Math.min(min,w_hot[j]);
                    flag=1;
//                    System.out.println(min);
                }
                if((z_good[i]+w_good[j])>=t){
                    min=Math.min(min,z_hot[i]+w_hot[j]);
                    flag=1;
//                    System.out.println(min);
                }

            }
        }
        if(flag==1){
            System.out.println(min);
        }else{
            System.out.println(-1);
        }
    }

    private static void m2() {
        System.out.println();
        Scanner in = new Scanner(System.in);
        List<int []> arrays=new ArrayList<>();
        int n = in.nextInt();//n个筛子

        for(int i=0;i<n;i++){
            int tmp[]=new int[6];
            for(int j=0;j<6;j++){
                tmp[j]=in.nextInt();
            }
            arrays.add(tmp);
        }
        //输出有几类筛子m，每类筛子有几个（m个数以空格分开，由大到小排序）
        int count=0;
        List<List<int []>>res=new ArrayList<>();

        List<int []> temp=new ArrayList<>();
        temp.add(arrays.get(0));
        res.add(temp);//第一个筛子肯定是一类
        for(int i=1;i<arrays.size();i++){
            int []a=arrays.get(i);
            for(int j=0;j<res.size();j++){
                int[] b = res.get(i).get(0);
                if(isSame(a,b)){
                    res.get(j).add(b);
                }else{
                    List<int []> temp_x=new ArrayList<>();
                    temp_x.add(b);
                    res.add(temp_x);//第一个筛子肯定是一类
                }
            }

        }
        int sort[]=new int [res.size()];
        for (int i = 0; i < res.size(); i++) {
            sort[i]=res.get(i).size();
        }
        Arrays.sort(sort);

        System.out.println(res.size());
        for (int i = sort.length - 1; i >= 0; i--) {
            System.out.print(sort[i]);
        }
    }


    public static boolean isSame(int a[],int b[]){

        return false;
    }

    private static void m1() {
        Scanner in = new Scanner(System.in);

        int k = in.nextInt();
        int n = in.nextInt();
        if(k==0){
            System.out.println(0);
            return;
        }
        int point[]=new int[n];
        for(int i=0;i<n;i++){
            point[i]=in.nextInt();
        }
        int sum=0;
        int backtstep=0;

        for(int i=0;i<point.length;i++){
            sum+=point[i];
            if(sum==k){
                System.out.println("paradox");
                return;
            }
            if(sum>k){
                int rest=sum-k+1;//多走的
                sum-=rest;
                backtstep++;
            }
        }
        System.out.println(k-sum+" "+backtstep);
    }

}